#include "Entity3D.h"
#include <cmath>
#include "../Graphics/Graphics.h"

using namespace leo;

Entity3D::Entity3D():
posX(0),
posY(0), 
posZ(0),
movSpeed(0),
movAngle(0),
scale(1),
isMoving(false)
{
}

Entity3D::~Entity3D()
{
}

void Entity3D::Update(float _timeBetweenFrames)
{
	if(isMoving)
	{
		float movAngleRad = movAngle * 3.14159f / 180.0f;
		posX += _timeBetweenFrames * movSpeed * cos(movAngleRad);
		posY += _timeBetweenFrames * movSpeed * sin(movAngleRad);
	}

	this->OnUpdate(_timeBetweenFrames);
}

void Entity3D::Draw(Graphics *_graph) const
{
	if (visible)
	{
		_graph->setMatrixMode(MatrixMode::WORLD);
		_graph->LoadIdentity();
		_graph->translate(posX,posY,posZ);
		_graph->scale(scale,scale,scale);
		this->OnDraw(_graph);
	}
}


void leo::Entity3D::OnCollide(Entity3D &_ent, float _px, float _py)
{
//si penetra por X
	if(_px<_py)
	{
		//si esto tiene posicion menor(viene por izquierda)
		if(this->GetPosX()<_ent.GetPosX())
		{
		//posX = _ent.GetPosX() - (_ent.GetWidth()/2) - (this->GetWidth()/2);
			posX -= _px;
		}
		//si esto tiene posicion mayor(viene por derecha)
		else
		{
		//posX= _ent.GetPosX() + (_ent.GetWidth()/2) + (this->GetWidth()/2);
			posX += _px;
		}
	}

	//si penetra por Y
	if(_py<_px)
	{
		//si esto tiene posicion menor(viene por abajo)
		if(this->GetPosY()<_ent.GetPosY())
		{
		//posY= _ent.GetPosY() - (_ent.GetHeight()/2) - (this->GetHeight()/2);
			posY -= _py;
		}
		//si esto tiene posicion mayor(viene por arriba)
		else
		{
		//posY= _ent.GetPosY() + (_ent.GetHeight()/2) + (this->GetHeight()/2);
			posY += _py;
		}
	
	}

}//end onCollide
